/*
 * Created by SharpDevelop.
 * User: David
 * Date: 2006-12-04
 * Time: 08:55
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */

using System;

namespace tools
{
	/// <summary>
	/// An interface for managers. Remember to create a member
	/// <code>private bool WasInitialized</code> for use with the methods <code>Initialize()</code> and
	/// <code>TearDown()</code>
	/// </summary>
	public interface IManager
	{
		#region methods
		
		/// <summary>
		/// Initializes the class, makes it ready for use. Once initialized, it should not be
		/// possible to initialize it again. This should be done with a member declared
		/// <code>private bool WasInitialized</code>
		/// </summary>
		void Initialize();
		
		/// <summary>
		/// Tears down the class, once tore down, it should not be possible to tear it down
		/// again. This should be done with a member declared <code>private bool WasInitialized</code>.
		/// After tear down, it should once again be possible to initialize the class.
		/// </summary>
		void TearDown();
		
		/// <summary>
		/// This should be called once every frame, if the manager is that type of manager
		/// (e.g. EntityManager moving things on the screen) Otherwise, this may be declared
		/// as an empty body.
		/// </summary>
		/// <param name="deltaTime">The time passed since the last frame</param>
		void Update(ref int deltaTime);
		
		#endregion
	}
}
